package com.example.tests;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

import org.testng.annotations.DataProvider;

import com.example.fw.ApplicationManager;
import com.example.fw.Groups;

public class GroupDataGenerator {
	
	protected static ApplicationManager app;
	
	static Random rnd = new Random();

	@DataProvider(name = "randomGroups")
	public static Iterator<Object[]> generateRandomGroups() {
		List<GroupObject> groups = new GroupDataGenerator().generateRandomGroupList(5);
		List<Object[]> list = new ArrayList<Object[]>();
		for (GroupObject group : groups) {
			list.add(new Object[]{group});
		}
		return list.iterator();
	}
	
	@DataProvider(name = "groupsFromFile")
	public static Iterator<Object[]> loadGroupsFromFile() {
		List<Object[]> list = new ArrayList<Object[]>();
		return list.iterator();
	}
	
	public static void main(String[] args) {
		if (args.length < 2) {
			System.out.println("Specify two parameters: file and count");
			return;
		}
		String file = args[0];
		int count = Integer.parseInt(args[1]);
		new GroupDataGenerator().generateDataToFile(file, count);
	}

	private void generateDataToFile(String file, int count) {
		List<GroupObject> groups = generateRandomGroupList(count);
	}

	private List<GroupObject> generateRandomGroupList(int count) {
		List<GroupObject> list = new ArrayList<GroupObject>();
		for (int i = 0; i < count; i++) {
			GroupObject group = generateRandomGroupData();
			list.add(group);
		}
		return list;
	}

	private static GroupObject generateRandomGroupData() {
		GroupObject group = new GroupObject()
			.setName("name"+rnd.nextInt())
			.setHeader("header"+rnd.nextInt())
			.setFooter("footer"+rnd.nextInt());
		return group;
	}
	
	@DataProvider(name = "existingAndRandomGroups")
	 public static Iterator<Object[]> generatePairOfExistingAndRandomGroup() {
		 List<Object[]> list = new ArrayList<Object[]>();
		 GroupObject existingGroup = getExistingGroup();
		 GroupObject newGroup = generateRandomGroupData();
		 list.add(new Object[]{existingGroup, newGroup});
		 return list.iterator();
	 }
	 
	@DataProvider(name = "getSomeExistingGroup")
	public static Iterator<Object[]> getSomeExistingGroup() {
		GroupObject someGroup = getExistingGroup();
		// формируем список наборов тестовых данных для тестового метода
		List<Object[]> result = new ArrayList<Object[]>();
		// метод принимает один параметр GroupObject
		// поэтому каждый тестовый набор -- это массив из одного объекта типа GroupObject
		result.add(new Object[]{someGroup});
		// возвращаем итератор набора тестовых данных
		return result.iterator();
	}

	private static GroupObject getExistingGroup() {
		// получаем множество групп
		Groups groups = app.getGroupHelper().getGroups();
		// выбираем случайную группу (какая попадётся)
		GroupObject someGroup = groups.getStoredGroups().iterator().next();
		return someGroup;
	}
		
}
